package com.ysw.lucene;

import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;

import java.io.File;

/**
 * @author shiwen
 * @date 2020/6/22
 */
public class SearchIndex {

    /**
     * 查询索引
     */
    @Test
    public void searchIndex() throws Exception {
        // 创建一个Director对象，指定索引库的位置
        Directory directory = FSDirectory.open(new File("D:\\lucene\\index").toPath());
        // 创建一个IndexReader对象
        IndexReader indexReader = DirectoryReader.open(directory);
        // 创建一个IndexSearcher对象，构造方法中的参数indexReader对象
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);
        // 创建一个Query对象，TermQuery，意思为查询文档内容中包含spring的
        Query query = new TermQuery(new Term("content", "spring"));
        // 执行查询，得到一个TopDocs对象  参数1:查询对象 参数2:查询结果返回的最大记录数
        TopDocs topDocs = indexSearcher.search(query, 10);
        // 取查询结果的总记录数
        System.out.println("查询总记录数：" + topDocs.totalHits);
        // 取文档列表
        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
        // 打印文档中的内容
        for (ScoreDoc doc : scoreDocs) {
            // 取文档id
            int docId = doc.doc;
            // 根据id取文档对象
            Document document = indexSearcher.doc(docId);
            System.out.println("文件名：" + document.get("name"));
            System.out.println("路径：" + document.get("path"));
            System.out.println("文件大小：" + document.get("size"));
            //System.out.println("内容：" + document.get("content"));
            System.out.println("================================寂寞的分割线=======================================");
        }
        // 关闭IndexReader对象
        if (indexReader != null) {
            indexReader.close();
        }
    }

}